#include <iostream>
#include <cstring>
#include <signal.h>
#include <unistd.h>

using namespace std;

struct sigaction act, oact;

void myhandler(int signal)
{
    cout << "success capture!" << endl;
    sigaction(SIGINT, &oact, nullptr);
}

int main()
{
    memset(&act, 0, sizeof(act)); //memset函数是按照一个字节一个字节的形式帮你初始化
    memset(&oact, 0, sizeof(oact));

    act.sa_handler = myhandler;

    sigemptyset(&act.sa_mask);
    sigaction(SIGINT, &act, &oact);
    while(true)
    {
        cout << "Process Running!!" << endl;
        sleep(1);
    }

    return 0;
}

// void myhandler(int signal)
// {
//     cout << "success capture!" << endl;
//     sigaction(SIGINT, oact, nullptr);
// }

// int main()
// {
//     memset(act, 0, sizeof(act)); //memset函数是按照一个字节一个字节的形式帮你初始化
//     memset(oact, 0, sizeof(oact)); //定义指针的话这里sizeof算出来的结果是4字节，并不是结构体大小

//     act.sa_handler = myhandler;

//     sigemptyset(&act.sa_mask);
//     sigaction(SIGINT, &act, &oact);
//     while(true)
//     {
//         cout << "Process Running!!" << endl;
//         sleep(1);
//     }

//     return 0;
// }

// void myhandler(int signal)
// {
//     cout << "success capture!" << endl;
//     sigaction(SIGINT, &oact, nullptr);
// }

// int main()
// {
//     memset(&act, 0, sizeof(act)); //memset函数是按照一个字节一个字节的形式帮你初始化
//     memset(&oact, 0, sizeof(oact));

//     act.sa_handler = myhandler;

//     sigemptyset(&act.sa_mask);
//     sigaction(SIGINT, &act, &oact);
//     while(true)
//     {
//         cout << "Process Running!!" << endl;
//         sleep(1);
//     }

//     return 0;
// }